GeoMesa: Polygon creation fails with some coordinates - geoserver

I am creating a polygon as a geom attribute in a SimpleFeature, and testing it with various geospatial coordinates, but I am finding that some coordinates work with POLYGON and others raise an exception. For example, this bounding box in South Korea fails:
Invalid xz value from geometry/time: POLYGON ((35.709649 128.188477, 35.708649 128.188477, 35.708649 128.188201, 35.709649 128.188201, 35.709649 128.188477))
but using the same code and specifying some coordinates in Italy works fine:
POLYGON((44.751610 9.997559, 44.750610 9.997559, 44.750610 9.997001, 44.751610 9.997001, 44.751610 9.997559))
There are others around the globe that work fine also, but South Korea in particular consistently fails. Does anybody know why this is and how I might stabilize the behavior so that it works consistently?
Thank you.

GeoMesa assumes that the points are defined in longitude-latitude order. I believe the polygon you have defined for South Korea is written in latitude-longitude order.
If you reverse the coordinates, it should work.

Related

Raycasting in all direction from the source in three js

I am working with RayCasting in three js from couple of days and have understood how it works.
at the moment I am able to intersect the object using raycasting but I am up with one problem.
I am trying to find if there is any obstacle intersecting my 5 meter away from my source and I am looking to check this 5 meter in all the direction(similar like a boundary of 5 meters around the object).
right now with what I am doing it only checks at one.
so can someone help me how can I achieve this ?
Using raycasting is not a precise and performant approach for this kind of collision detection since you would have to cast an infinite number of rays to produce a 100% reliable result.
You should work with bounding volumes instead and perform intersection tests between those. three.js provides a bounding sphere and AABB implementation in the core which are sufficiently tight bounding volumes for many use cases. You can also give the new
OBB class a try which is located in the examples. All three classes provide methods for intersection tests between all types.

Surface Reconstruction given point cloud and surface normals

I have a .xyz file that has irregularly spaced points and gives the position and surface normal (ie XYZIJK). Are there algorithms out there that can reconstruct the surface that factor in the IJK vectors? Most algorithms I have found assume that surface normals aren't known.
This would ultimately be used to plot surface error data (from the nominal surface) using python 3.x, and I'm sure I will have many more follow on questions once I find a good reconstruction algorithm.
The state of the art right now is Poisson Surface Reconstruction and its screened variant. Code for both is available, e.g. under http://www.cs.jhu.edu/~misha/Code/PoissonRecon/Version8.0/. It is also implemented in MeshLab if you want to take a quick look.
If you want to take a look at other methods, check out this STAR. Page three has a table of a couple of approaches and their inputs.

how do you set projections for city level geographies

I've asked similar questions before and I'm still struggling.
I want to create geo based info graphics at the level of a city.
I need to be able to take some latitude/longitude values and project them such that they are centered and appropriately zoomed.
It would help me a great deal to see an example that plots a small number of points.
37.781040, -122.497681
37.720504, -122.495622
37.723220, -122.395028
This is roughly an L shape and all three points should be in San Francisco.
It could be as simple as 3 black dots on a white background. I hope to learn:
which projection?
how do you adjust the projection so that an area the size of San Francisco is on the canvas?
how do you translate those coordinates and position them on that canvas?
Could someone create such an example?
Thanks.
-Kelly
I created a simple example that works.
https://gist.github.com/kellyfelkins/9741723
I think I was making multiple mistakes that made it really difficult to correct.
In case others have troubles too, here are some things to watch out for:
The projection method expects an array. For a while I was passing it 2 arguments, but it needs a single argument that is an array.
The projection expects the values in longitude, latitude order.
-Kelly

d3js - how to set albers projection properly?

I have some geojson data for Japan, which I managed to position properly on a mercator projection, but I'm a bit lost as to how to position it properly using an albers projection, other than trial and error.
Is there a good tool to use?
blocks example: http://bl.ocks.org/4043986
long, lat for japan (wikipedia):
latitudes 24° - 46°N,
longitudes 122° - 146°E.
geojson link: https://gist.github.com/raw/4043986/f53b85ab0af1585cd0461b4865ca4acd1fb79e9f/japan.json
As of now, it's the version 3 of D3.js.
It might be worth looking at the original source albers.js at github, which contains :
d3.geo.albers = function() {
return d3.geo.conicEqualArea()
.parallels([29.5, 45.5])
.rotate([98, 0])
.center([0, 38])
.scale(1000);
};
Now, d3.js use combination of projection.rotate and projection.center to place center of the projection to long 98°W, lat 38°N (around Hutchinson, Kansas).
From Geo Projections API,d3.geo.conicEqualArea()
.parallels([29.5, 45.5]) sets the Albers projection’s two standard parallels latitudes 29.5°N and
45.5°N, respectively. But what is two standard parallels?
To understand what parallels setting is, one need to know that Albers projection is a kind of conic projection.
A conic projection projects information from the spherical Earth to a cone that is either tangent to the Earth at a single parallel, or that is secant at two standard parallels.
Choosing the best standard parallels setting seems to be a subtle task, of which the goal is to minimize the projection distortion when mapping between surfaces. Anyway, choosing the two values to be closed to a country top/bottom edges is intuitively good, as it helps minimize the distance between the [conic/sphere] surfaces enclosing a country.
I found the answer looking through the repository - the tool is right there!
clone d3.js from the github repository.
edit /d3/examples/albers.html line 53 to point at your GEOJSON file:
Put the origin long / lat sliders to the center of your country / region (for me, it was 134° / 25°)
Change the paralells to be as close to the edges of your country / region.
adjust scale & offset to a nice size & position.
There are similar tools for the other projections.
edit: The repository has changed (and is constantly changing), so I've created a gist to preserve the example: https://gist.github.com/4552802
The examples are no longer part of the github repository.

Separating Axis Theorem - Containment and the minimum translation vector

My code to calculate the minimum translation vector using the Separating Axis Theorem works perfectly well, except when one of the polygons is completely contained by another polygon. I have scoured the internet for the solution to this problem and everyone just seems to ignore it ( http://www.codezealot.org/archives/55#sat-contain talks about this, but doesn't give a full solution...)
The pictures below is a screenshot from my program illustrating the problem. The translucent blue triangle is the position of the rectangle before the MTV is applied, and the other triangle is with the MTV applied.
It seems to me that the link you shared does give a solution to this. In your MTV calculation, you have to test for complete containment in a projection and change the calculations accordingly. (The pseudocode is in reference to figure 9 on that page.) Perhaps if you post your code, we can comment on why it isn't working.

Resources