esri / oriented-imagery Goto Github PK
View Code? Open in Web Editor NEWFind developer resources for Oriented Imagery, including a Web AppBuilder widget and oriented imagery catalog (OIC) schema.
License: Apache License 2.0
Find developer resources for Oriented Imagery, including a Web AppBuilder widget and oriented imagery catalog (OIC) schema.
License: Apache License 2.0
I am using the 3D app. When moving the Bubble Panorama view, the red frustum of 'current coverage' often moves in an opposite direction for half a second before moving to the right position. It does not seem to happen in v2.3.
Are you sure it's
camPitch = math.degrees(math.acos(dv3))
and not
camPitch = 180 - math.degrees(math.acos(dv3))
CamPitch = 90 means the camera is viewing toward the horizon. 0 indicates straight down.
Release of Experience Builder widget
In JavaScript API 4.16, the constructor of FeatureForm
becomes asynchronous.
As FeatureForm has to load data from ArcGIS Online, its creation is slower than the creation of Update
& Delete
buttons.
I changed
var featureForm = new FeatureForm({
container: editingNode,
layer: layer,
feature: graphic,
fieldConfig: fieldInfos
});
//editable field change
domConstruct.place("<button class='btn btn-clear'>" + this.nls.update + "</button><button class='btn btn-clear' style='margin-left:10px;'>" + this.nls.delete + "</button>", featureForm.container);
console.log(featureForm.container);
featureForm.container.childNodes[1].addEventListener("click", lang.hitch(this, function () {
if (featureForm)
featureForm.submit();
}));
featureForm.container.childNodes[2].addEventListener("click", lang.hitch(this, function () {
layer.applyEdits({ deleteFeatures: [{ objectId: objectId }] }).then(lang.hitch(this, function (result) {
if (result.deleteFeatureResults.length) {
this.orientedViewer.refreshVectorLayer(layer.title);
this.sceneView.popup.clear();
this.sceneView.popup.close();
}
}));
}));
to
var featureForm = new FeatureForm({
container: editingNode,
layer: layer,
feature: graphic,
fieldConfig: fieldInfos
});
featureForm._resourcesFetch.then(() => {
domConstruct.place("<button class='btn btn-clear'>" + this.nls.update + "</button><button class='btn btn-clear' style='margin-left:10px;'>" + this.nls.delete + "</button>", featureForm.container, "last");
console.log(featureForm.container);
featureForm.container.childNodes[1].addEventListener("click", lang.hitch(this, function () {
if (featureForm)
featureForm.submit();
}));
featureForm.container.childNodes[2].addEventListener("click", lang.hitch(this, function () {
layer.applyEdits({ deleteFeatures: [{ objectId: objectId }] }).then(lang.hitch(this, function (result) {
if (result.deleteFeatureResults.length) {
this.orientedViewer.refreshVectorLayer(layer.title);
this.sceneView.popup.clear();
this.sceneView.popup.close();
}
}));
}));
});
When we click on map to view an image for that location, if we click on the vector layer in the map, then the image is not displayed in the viewer.
(Reproduced on 2.5.1 & 2.5.2)
Nothing happens when you click the corresponding buttons. No files are created.
Related Issue: #19
Rectangular overlay labels are not shown the next time you open the image.
Hello,
I am having trouble when trying to add geospatial video to my OIC. I copied the GeospatialVideo.oictype and GeospatialVideo.py files to C:\Image_Mgmt_Workflows\OrientedImagery\Types and I am able to see GeospatialVideo as an available Input Type in the Add Images to Oriented Imagery Catalog tool. I have a .mp4 video file that I captured with a drone and was able to successfully combine with the corresponding geospatial video log using the Video Multiplexer tool. I am able to view the video in the FMV Player and the geospatial components are displayed on my map so my video seems to have been properly multiplexed. I have also uploaded the multiplexed video to my agency's public site so the video is web-accessible.
When I run the Add Images to Oriented Imagery Catalog tool:
-Input OIC is set to an empty OIC created by the Create Oriented Imagery Catalog tool
-Input Type is set to GeospatialVideo
-Metadata File is set to the path of the geospatial video log csv file (the same one I used for multiplexing) on my local drive
-Video File is set to the url for my multiplexed .mp4 video file on my agency's site
-Imagery Type is set to GeospatialVideo_Defaults
and the rest of the parameters are kept at their default values
This is where I'm stuck. When running the tool, I receive the following message and I don't know how to proceed
The tool completes but it seems to have not done anything. Any help is greatly appreciated!
On another note, I was wondering if there were plans to release any support documentation for Geospatial Video similar to the available user docs for Drone2Map, Pictometry, and Sanborn.
Thanks!
The drone2map oictype parameter file is invalid.
This issue is causing users to see an issue when trying add data using this oictype.
It would be nice if we can edit existing features and labels.
Ditto.
When one create a catalogue using the ArcGIS Pro OIC Toolbox, even if the active map is a 3D scene, the points are hard-coded to be 2D. Even if the photo has a GPSAltitude
EXIF field, the plugin does not read the value.
One has to drag the exposure points from 2D to 3D, manually enables their z-values, and change the path to the new exposure points.
Indeed, the viewer is able to read the z-values of these photos after the onerous procedure, but they are currently useless.
In Widget.js
, there is this code snippet:
domStyle.set("oiviewer", "width", "100%");
domStyle.set("oiviewer", "height", "100%");
which supposedly refers to the this DOM node in Widget.html
:
<div data-dojo-attach-point="oiviewer" style="width: 500px;height: 400px;"></div>
However, we use dom.byId()
in the inner function, so this is giving an exception. If we add the id
to the tag, then the problem will be resolved.
<div id="oiviewer" data-dojo-attach-point="oiviewer" style="width: 500px;height: 400px;"></div>
May I ask why the depth maps are required to be RGBA?
This is from loadDepthImage
from viewer.js
:
for (var l = 0; l < Object.keys(this.depthInfo.pixels).length; l++)
for (var c = n.getImageData(a * l, 0, a, h.height), m = 0; m < c.data.length; m += 4) e = c.data[m] >> 6 << 1, s = ((63 & c.data[m]) << 8 | c.data[m + 1]) << e, this.depthInfo.pixels[l].push(s / 1e3);
this.depthImage = !0, this.depthInfo.isLoading = !1, I.set(this.depthBtn, "display", "inline"), this.domNode.getElementsByClassName("oi-imageViewer")[0].removeChild(h)
If I am not mistaken, c.data[m]
is the red channel and c.data[m + 1]
is the green channel. That means the blue and alpha channel are unused. It doubles the data and slows down the load process of the image (and the generation of depth images). And how should one express decimal places of lengths? Thanks.
When using the Create Coverage Features tool on an OIC that does not have all properties set (such as AvgHtAG or NearDist/FarDist), it completes with a warning that 1 property was missing. This requires repeated runs to understand what properties are missing.
Enhancement request: report all missing properties and/or allow setting missing properties in this tool.
Despite "exposure points" are given in 3D (i.e. possessing z-values), the function imageToGroundPanorama
in viewer.js
do not calculate them.
Even given the z-axis of the exposure point
, HFOV
, heading
, pitch
, roll
, depth
from the depth map, the distance above ground is always NaN, because the resultant point is hard-wired into 2D.
You can definitely calculate the z if you have the values above. First you find the tilt of the current heading using the original tilt
and heading
, then you add the angle between the origin and the point
. Since you have the new angle and the depth, you now have depth*Math.atan2(newAngle)
. More on this later.
Bug fixes and Enhancements
update widgets with changes from 2.3 api.
UPload user doc for GeoSpatial Video.
I was following the ESRI tutorial found in "Tutorial - Create an Oriented Imagery Catalog .txt". At the time I did not have privileges to upload vector tiles to our AGOL organizations account and it failed to upload the vector tiles. Now that I do have those privileges, Ive tried to re-upload using "Publish All - overwrite". But am getting an error.
Publish Oriented Imagery Catalog
=====================
Parameters
Oriented Imagery Catalog esriredlands_test
Tags OrientedImagery
Description test oriented imagery
Portal folder name:
Publish options : Publish all - overwrite
Add images as attachments false
=====================
Messages
Start Time: Monday, August 16, 2021 7:20:59 PM
Update Available. Please read C:\Image_Mgmt_Workflows\OrientedImagery\Scripts\CheckForUpdate.json
Publishing Exposure Points.
'NoneType' object has no attribute 'id'
Failed to execute (PublishOrientedImageCatalog).
Failed at Monday, August 16, 2021 7:21:13 PM (Elapsed Time: 13.80 seconds)
Arcpro version: 2.8
Python version: 3.7.10
Hiya,
I am struggling to view images which have been taken through the QuickCapture app which uses data with the oriented imagery capabilities enabled. This is what I have attempted:
I have installed the oriented imagery catalogue plugin and tools into ArcGIS Pro. After adding in the OIC generated from the QuickCapture App and selecting the OI point the imagery viewer just perpetually loads.
Using the ESRI Oriented Imagery Viewer (https://oi1.img.arcgis.com/app/index.html?oic=7afb7e86a63d4bb28d0c1f925c1dc7df), after adding the data in and selecting the OI point the coverage areas are loaded, however the imagery viewer has the message 'failed to load image'.
I have added the custom widget into WebApp for developers and added the OIC to the app and map. When selecting the OI point none of the coverage areas are shown and the imagery viewer just says '[object Event]'. However it does seem to select the points which should be within the current coverage, and does change the selected of points.
Whilst they all have differences, the main issue is not being able to view the images. As the data is being generated through QuickCapture (OIC was enabled at the start before any images were taken) the images are stored in the data as attachments, as much of the guidance around using oriented imagery doesn't mention attachments could this be the issue? However reading the help and guidance pertaining to the QuickCapture app and oriented imagery, it seems it should work fine.
I am using version 2.6.0 (ArcGIS Pro) and version 10.8.1 (Enterprise).
Any help is greatly appreciated, Thanks!
Sam
I am testing a set of 'B'('bubble')-type panoramic photos. When any of the panorama is first loaded, the photo is already slightly zoomed in. Then when you click the Zoom In button (or upward mouse scroll), it actually zooms out. After that, you won't be able to zoom in and out again.
The bug might be caused by fov
from libpannellum.py
, but only you know the logic behind. To me, zooming in is simply enlargement of the image, not modifying pannellum's fov.
When credentials are presented in the OIC data structure they do not seem to be used. Username and password prompts are still appearing.
I registered the Web AppBuilder widget with my ArcGIS Portal 10.7.1 (customer-driven). Published an OIC successfully and can configure it for use in the widget. However, when identifying a location, the widget fails to return an image. Some digging shows what appears to be an error in 'createThumbnailUrl' in https://oi.geocloud.com/api/v1.1/js/viewer.js (line 1243 in browser formatted version).
else if ("A|" === t.Image.substr(0, 2)) {
var r = t.Image.split("|")
t at this point does not have an attribute Image
. It does however have an attribute image
that has a valid URL to the returned image.
after setting:
t.Image = t.image
in the browser console for the images returned from the search, the app does display the images properly.
There are two zooming issues.
The first one is a serious one. Zooming in your libpannellum.js
is directly tied to the maximum FOV, which is in turn tied to FarDistance. In Pannellum (v2.5), zooming is simply magnification, it neither depends on or modifies the FOV. Indeed, the buttons do nothing (except the behaviour in #18) when the OIC window is large enough, say above 600x600.
The screenshot sums the first issue up :
Magnification is essential since without it measuring will not be accurate. At the end of the road, the depth values are packed together. Deviation by a single pixel may change a lot. Also, zooming is among the most common features.
The second one is #18. When the OIC window is large enough, say above 600x600, pressing "Zoom In" actually zooms out once. Then the buttons simply do nothing.
Thanks for all the hard work.
Well this issue is not directly a bug on Oriented Imagery, but it will make the feature unusable. I know it is related to the JavaScript API.
If you have some 3D models on the scene - whether it is of type 3DObject I3S
, Mesh I3S
or BIM
- and you Alt-Click on the map, the green diamond indicator is completely invisible. This is not related to opacity. You can reproduce this having a 3D model of opacity 0.1.
The same happens if you turn on the Current coverage and Additional coverage frustums. The green diamond is masked.
I don't understand the rationale behind this code snippet:
if ("UnDef" === e && (e = ["UnDef", "UnDef"]), t[0].z) var i = "<br>Z: " + t[0].z.toFixed(2);
else i = "";
Why is z-value information only available when accuracy is Undef?
(viewer.js
, function measurementClient
, under case "Point":
)
I have some floating point MRF depth images with LERC compression.
The viewer is all black.
I can see that pixels: [Float32Array(2097152)]
are CORRECTLY loaded.
e.g.
1010007: 29.698009490966797
1010008: 29.933534622192383
1010009: 29.933534622192383
1010010: 29.733535766601562
But the viewer is all black and measuring tools cannot be used.
Issues while calling gptool from python script
GDAL path issue on 2.8.1 pro
-works on pro 2.8.0 but has the issue of GDAL in pro 2.8.1
- Repo install pro 2.8.1 and try the running script
Local Image path (name getting Null)
-on Imagelist image type, while passing the local path name field in the exposure point FC gets null
- Repo run tool with local image path having (c:\imagepath.jpg)
Multithread check with a number of images
- remove multithread subprocess for images lesser than 10 or 20
Regression for the all OI Types
I don't understand the rationale behind this code snippet:
if ("UnDef" === e && (e = ["UnDef", "UnDef"]), t[0].z) var i = "<br>Z: " + t[0].z.toFixed(2);
else i = "";
Why is z-value information only available when accuracy is Undef?
(viewer.js
, function measurementClient
, under case "Point":
)
Restructure the widgets folder.
Create folders and Readme.md files for each.
Create Folders
Delete Folders
OrientedImagery
OrientedImagery 3D
Update Readme.md files for each.
I don't understand the rationale behind this code snippet:
if ("UnDef" === e && (e = ["UnDef", "UnDef"]), t[0].z) var i = "<br>Z: " + t[0].z.toFixed(2);
else i = "";
Why is z-value information only available when accuracy is Undef?
(viewer.js
, function measurementClient
, under case "Point":
)
I am testing a set of 'T' (terrestrial frame camera) images with depth maps on v2.4. The depth maps are in MRF format with LERC compression. The distance measurement tool always shows
NaNm ± NaN
.
Plus, Alt+Click does not seem to work. Red frustum disappears after zooming in by one level.
I can give you the data set in private messages.
while released only yesterday, it appears the OIC addin does not work properly with ArcGIS Pro 2.8.2. Please include support for this latest release.
Add Support to play video files in ArcGIS Pro Oriented Imagery Addin.
more info #45
Please don't set NaN
values to FarDist
. This just doesn't make any sense.
Original imageToGroundPanorama
:
} r || 0 === r || (r = t[0] < 0 ? this.selectedFeatureAttributes.avghtag / Math.tan(-t[0] * Math.PI / 180) : this.selectedFeatureAttributes.fardist) > this.selectedFeatureAttributes.fardist && (r = this.selectedFeatureAttributes.fardist);
I don't think this feature is fixed yet.
Could you double check, please? Thanks.
You can use my 'T' dataset.
I am testing a set of 'T' (terrestrial frame camera) images with depth maps on v2.4. The depth maps are in MRF format with LERC compression.
How to reproduce:
(Chrome v83)
Upon maximizing the browser, the height of the OIC floating window becomes this:
Here is the browser log:
Uncaught TypeError: Cannot read property '0' of undefined
at Object.httpRangeRequest (mrfDataset.js:1)
at Object.readEntireImage (mrfDataset.js:1)
at Object.readEntireImage (dojo.js:42)
at Object.getNewDepthMRF (viewer.js:1)
at Object.getNewDepthImage (viewer.js:1)
at Object.resize (viewer.js:1)
at main.js:1
Then the app freezes, we are not able to interact with the map again.
Thanks.
Update Experience Builder and Web AppBuilder widgets to the 2.7 release versions.
Can Oriented Imagery read NoData
in MRF depth maps?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.